﻿#pragma once
#include "XyNet/Global.h"

namespace XyNet
{
	/// sha摘要
	class XYNET_API Sha : noncopyable
	{
	public:
		/// 摘要类型
		enum DigestType
		{
			ShaDefault = 0,	// 默认Sha256
			Sha1 = 160,
			Sha256 = 256,
			Sha384 = 384,
			Sha512 = 512
		};

	public:
		/// 以摘要类型初始化
		Sha(DigestType digestType = ShaDefault);

		/// 获取摘要类型
		DigestType getDigestType() const;
		/// 设置摘要类型
		void setDigestType(DigestType digestType);

		/// 获取摘要字节大小
		int getDigestByteLength() const;
		/// 获取摘要位大小
		int getDigestBitLength() const;

		/// 计算摘要
		Bytes calculateDigest(const Bytes& input) const;

		/// 获取默认密钥类型
		static DigestType getDefaultDigestType();
		/// 设置默认密钥类型
		static void setDefaultDigestType(DigestType digestType);

	private:
		/// 摘要类型
		DigestType _digestType;

		/// 默认摘要类型
		static DigestType _defaultDigestType;
	};
}